package br.com.saab.quantotempofalta.form;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.annotation.PostConstruct;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.text.MaskFormatter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.saab.quantotempofalta.negocio.observer.ControladorHorasTrabalhadas;
import br.com.saab.quantotempofalta.negocio.observer.TerminaLogoDia;

/**
 * Formulário para a edição das entradas e saídas.
 * 
 * @author Felipe
 */
@Component
public class HorariosForm extends JFrame implements TerminaLogoDia {

	private static final long serialVersionUID = -1898084678112965425L;
	
	private final String TEXTO_HORAS_TRABALHADAS = "Você já trabalhou %s";
	
	protected SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
	
	@Autowired
	private ControladorHorasTrabalhadas controladorHorasTrabalhadas;
	
	private JPanel contentPane;
	private JLabel lblEntrada;
	private JFormattedTextField edtEntrada1;
	private JLabel lblSaida;
	private JFormattedTextField edtSaida1;
	private JLabel lblEntrada2;
	private JFormattedTextField edtEntrada2;
	private JLabel lblSaida2;
	private JFormattedTextField edtSaida2;
	private JLabel lblTrabalhado;
	
	public HorariosForm() {
		try {
			setTitle("Entradas e Saídas");
			setBounds(100, 100, 320, 190);
			setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
			contentPane = new JPanel();
			contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
			setContentPane(contentPane);
			contentPane.setLayout(null);
	
			lblEntrada = new JLabel("Entrada 1");
			lblEntrada.setFont(new Font("Calibri", Font.PLAIN, 14));
			lblEntrada.setBounds(10, 11, 62, 14);
			contentPane.add(lblEntrada);
	
			edtEntrada1 = new JFormattedTextField(new MaskFormatter("##:##:##"));
			edtEntrada1.setFont(new Font("Calibri", Font.PLAIN, 14));
			edtEntrada1.setBounds(75, 8, 62, 20);
			contentPane.add(edtEntrada1);
	
			lblSaida = new JLabel("Saída 1");
			lblSaida.setFont(new Font("Calibri", Font.PLAIN, 14));
			lblSaida.setBounds(162, 11, 62, 14);
			contentPane.add(lblSaida);
	
			edtSaida1 = new JFormattedTextField(new MaskFormatter("##:##:##"));
			edtSaida1.setFont(new Font("Calibri", Font.PLAIN, 14));
			edtSaida1.setBounds(227, 8, 62, 20);
			contentPane.add(edtSaida1);
	
			lblEntrada2 = new JLabel("Entrada 2");
			lblEntrada2.setFont(new Font("Calibri", Font.PLAIN, 14));
			lblEntrada2.setBounds(10, 39, 62, 14);
			contentPane.add(lblEntrada2);
	
			edtEntrada2 = new JFormattedTextField(new MaskFormatter("##:##:##"));
			edtEntrada2.setFont(new Font("Calibri", Font.PLAIN, 14));
			edtEntrada2.setBounds(75, 36, 62, 20);
			contentPane.add(edtEntrada2);
	
			lblSaida2 = new JLabel("Saída 2");
			lblSaida2.setFont(new Font("Calibri", Font.PLAIN, 14));
			lblSaida2.setBounds(162, 39, 62, 14);
			contentPane.add(lblSaida2);
	
			edtSaida2 = new JFormattedTextField(new MaskFormatter("##:##:##"));
			edtSaida2.setFont(new Font("Calibri", Font.PLAIN, 14));
			edtSaida2.setBounds(227, 36, 62, 20);
			contentPane.add(edtSaida2);
	
			lblTrabalhado = new JLabel();
			lblTrabalhado.setHorizontalAlignment(SwingConstants.CENTER);
			lblTrabalhado.setFont(new Font("Calibri", Font.BOLD, 16));
			lblTrabalhado.setBounds(10, 77, 279, 14);
			contentPane.add(lblTrabalhado);
	
			JButton btnUmAbraco = new JButton("Opa, beleza, brigado!");
			btnUmAbraco.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					HorariosForm.this.setVisible(false);
				}
			});
			btnUmAbraco.setBounds(73, 118, 157, 23);
			contentPane.add(btnUmAbraco);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Se registra como um listener para poder atualizar o label.
	 */
	@PostConstruct
	@SuppressWarnings("unused")
	private void queroSaberQuantoFalta() {
		controladorHorasTrabalhadas.addTerminaLogoDiaListener(this);
	}
	
	@Override
	public void trabalheiMaisUmPouco(String horasTrabalhadas) {
		if (horasTrabalhadas != null && horasTrabalhadas != "")
			lblTrabalhado.setText(String.format(TEXTO_HORAS_TRABALHADAS, horasTrabalhadas));
		else
			lblTrabalhado.setText("");
	}
	
	public String getEntrada1() {
		return edtEntrada1.getText();
	}
	
	public void setEntrada1(String entrada1) {
		edtEntrada1.setText(entrada1);
	}
	
	public String getSaida1() {
		return edtSaida1.getText();
	}
	
	public void setSaida1(String saida1) {
		edtSaida1.setText(saida1);
	}
	
	public String getEntrada2() {
		return edtEntrada2.getText();
	}
	
	public void setEntrada2(String entrada2) {
		edtEntrada2.setText(entrada2);
	}
	
	public String getSaida2() {
		return edtSaida2.getText();
	}
	
	public void setSaida2(String saida2) {
		edtSaida2.setText(saida2);
	}
	
}
